package mtt.us.client.views.fachbereich.studiengang;

import hmvc4gwt.client.event.HmvcEvent;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import mtt.us.client.events.SetModelDataEvent;
import mtt.us.dto.MatrikelDTO;
import mtt.us.dto.StudiengangDTO;
import mtt.us.hmvcFramework.client.hmvc.view.GuiView;

import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.VerticalPanel;

public class StudiengangView extends GuiView {

	/**
	 * enthält alle Objekt den Listener beinhalten
	 */
	private Map mapEvents = new HashMap();

	public void doInitImpl() {
		getController().register(SetModelDataEvent.class, this);
	}

	public void handleEvent(HmvcEvent event) {

		if (event instanceof SetModelDataEvent) {
			List listStudiengänge = (List) event.getPayload();
			refreshTableStudiengänge(listStudiengänge);
		}

	}

	/**
	 * aktualisiert die Liste mit den Fachbereichen
	 * 
	 * @param listStudiengänge
	 */
	private void refreshTableStudiengänge(List listStudiengänge) {

		clear();

		/*
		 * Für jeden Studiengang ein VerticalPanel anlegen
		 */
		Iterator iterator = listStudiengänge.iterator();
		while (iterator.hasNext()) {
			StudiengangDTO studiengang = (StudiengangDTO) iterator.next();

			VerticalPanel panelStudiengang = new VerticalPanel();
			panelStudiengang.setStylePrimaryName("indexFachbereichPanel");

			/*
			 * Titel erstellen und hinzufügen
			 */
			Hyperlink linkTitle = new Hyperlink(studiengang.getName(),
					"Studiengang=" + studiengang.getId());
			linkTitle.setStylePrimaryName("indexFachbereichTitle");

			panelStudiengang.add(linkTitle);

			/*
			 * link zur EventMap hinzufügen
			 */
			mapEvents.put("Studiengang=" + studiengang.getId(), studiengang);

			/*
			 * Matirkel des Studiengangs zur Liste hinzufügen
			 */
			Iterator iteratorMatrikel = studiengang.getListMatrikel()
					.iterator();

			while (iteratorMatrikel.hasNext()) {
				MatrikelDTO matrikel = (MatrikelDTO) iteratorMatrikel.next();

				Hyperlink linkMatrikel = new Hyperlink(matrikel.getName(),
						"Matrikel=" + matrikel.getId());
				linkMatrikel.setStylePrimaryName("indexStudiengangList");

				panelStudiengang.add(linkMatrikel);

				/*
				 * link zur EventMap hinzufügen
				 */
				mapEvents.put("Matrikel=" + matrikel.getId(), matrikel);
			}

			add(panelStudiengang);
		}
	}
}
